S44PLAY.X の歴史
S44PLAY.X v0.60 (1999.02.01) 激光電脳倶楽部 Vol.6 の企画として開発、掲載。経緯については激光電脳倶 楽部の該当記事を参照すべし。
S44PLAY.X v0.61 (1999.02.14) -preconv のみに変更。DYNAMIC_ENDIAN は無効。-preconv スイッチは無視扱 い。 mpu_check を machine_check に変更。 本体が X68000 のときだけ opm_wait を有効にする。x68000_flag が未使用だ った。 ソースの中の left と right の記述が逆になっていたので修正。 ループ再生スイッチ -loop を追加。
S44PLAY.X v0.62 (1999.02.14) -s44/-m44 を以降に指定したファイルに対して有効になるように変更。 stricmp がバグっていたの修正。 strnicmp/strncmpi を追加。 スイッチの大文字と小文字の区別をしない。
S44PLAY.X v0.63 (1999.02.15) Timer-D 割り込みルーチンを 68000 用に最適化。
S44PLAY.X v0.64 (1999.02.15) WAVE に対応。
S44PLAY.X v0.65 (1999.04.01) 68000 のとき WAVE のエンディアン変換に movep を使う。 -reverse のスペルが間違っていた。
S44PLAY.X v0.66 (1999.04.04) 矩形波に近い波形のパラメータを変更(フィードバックなし)。
S44PLAY.X v0.67 (1999.04.05) キーオンの間隔をより正確にする。 PCM→OPM 変換テーブルの生成アルゴリズムを変更(-reverse/-drama/-tl は無効)。 小さい音を疑似的に再現するモード(-weigh)を追加。 ページフォーマットの変更に失敗した場合もページフォーマットの復元を試みる。
S44PLAY.X v0.68 (1999.04.06) -l のとき CD 名と曲名を CDC に問い合わせる。 TRAP#14 をフックして白帯が出ないようにした。
S44PLAY.X v0.69 (1999.04.08) 演奏のときも CD 名と曲名を CDC に問い合わせる。
S44PLAY.X v0.70 (1999.04.13) SCSI まわりを再構築。 -force を新設。
S44PLAY.X v0.71 (1999.04.15) .fmp フォーマットへの変換と再生を追加。 -silent を新設。 -z<n> を新設。 inquiry が 'SONY ','TOSHIBA ' で始まっていれば種別を確定。
S44PLAY.X v0.72 (1999.04.17) CTRL+C でも強制終了する。 -id<n> で LUN を指定可能。 -tl を完全に廃止。 nxttop,pointer,dummy_opm_data の配置を変更して割り込みルーチンを最適化。 ステレオ再生時、チャンネル遷移直後は必ず発音する。
S44PLAY.X v0.73 (1999.04.20) トラック情報とトラック名を最初にまとめて取得する。 [F] でフェードアウトする。まだ稀に特定のチャンネルのフェードアウトに失 敗するようだ。
S44PLAY.X v0.74 (1999.04.21) Timer-A の代わりに Timer-C を使う。_VDISPST で垂直帰線割り込みを使用中 でも再生できるようになった。 POWER OFFをアボート処理にして、アボート後に 10 秒待ってから電源を切る。 -fi と -fo を追加。
S44PLAY.X v0.75 (1999.04.22) 波形の + 側と - 側の使用チャンネルを分離して 0 付近の分解能を大幅にア ップ。音質が劇的に良くなった。S44L16(CD や WAV)のモノラル再生のみ対応。 ステレオ再生やボリュームの変更には未対応。 -fo の処理がバグっていて -force が効かなくなっていたので修正。
S44PLAY.X v0.76 (1999.04.24) S44 と M44 のモノラル再生に対応。ボリュームの変更に対応。ステレオ再生 には未対応。 v0.75 で音質が改善したので、存在意義の無くなった -weigh と -z を完全に 廃止。
S44PLAY.X v0.77 (1999.04.26) モノラル再生のチャンネル遷移を符号反転が出てくるまで遅延することでプチ ノイズを除去。
S44PLAY.X v0.78 (1999.04.29) ステレオ再生のプチノイズも除去。鳴っている音の中で低音が最も大きい場合 を除けば、プチノイズはほとんど除去される。
S44PLAY.X v0.79 (1999.05.01) 割り込み間隔と再生速度のずれを従来は整数補間で調整していたが、これを線 形補間で行う。この機能は 060 専用になるだろう。
S44PLAY.X v0.80 (1999.05.06) 割り込み間隔を 20μs にしてみるテスト。ステレオ再生は 22.05kHz→25kHz ではなくて 44.1kHz→25kHz。特にリアルタイム再生は 68060 のみ。 バッファエンドコードを 負数+$00/$01 から 負数+$00+$00/$01 に変更。割り 込みルーチン側の cmpi.b #$01,~ が tst.b で済むので 68000 のとき少し速い はず。
S44PLAY.X v0.80_4 (1999.05.12) 補間はすべて変換側で行うものとし、割り込みルーチン側の補間コードを完全 に削除。 PCM の 1 データあたりの変化量を制限するコードを削除。
S44PLAY.X v0.80_5 (1999.05.21) 補間アルゴリズムを変更。線形補間で、瞬間値ではなく、折れ線グラフの面積 を使う(とりあえずモノラルのみ)。 ステレオの面積補間を実現するために、3 バッファ方式に変更。 47.619kHz でテスト。
この間に PCM2FMP.X と FMPPLAY.X と満開製作所のゲーム『あの、素晴らしい をもう一度』の OPENING.X(Oh!X 1999 年夏号掲載用)を作成。 PCM2FMP.X は C で記述して面積補間を実現。明らかに音質がよい。 FMPPLAY.X は OPENING.X の元にするべく作成した FMP 再生専用プログラム。 OPENING.X では Timer-A 割り込みを併用してグラフィック表示やパッドやマ ウスの操作に反応する機能を加えた。
S44PLAY.X v0.81 (1999.06.04) 割り込み間隔を任意にするため、Timer-D 割り込みルーチンの自己書き換えコ ードを追加。 MPU を厳密に判別。 -mac と -mpu を追加。 AIFF に対応。
S44PLAY.X v0.82 (1999.06.05) Timer-D 割り込みルーチンの自己書き換えを使って FMP ファイルのサンプリ ング周波数に自動追従。X68030 で X68000 用の FMP ファイルを再生できる。
S44PLAY.X v0.83 (1999.06.06) 拡張操作モード(-extra)を追加。ANOS の OPENING.X で使った Timer-A 割 り込みルーチンなどを流用。
S44PLAY.X v0.84 (1999.06.15) 音質指定(-lq/-hq/-sq)を追加。ただし -sq(面積補間)は未完成。preconv ルーチンが巨大化した。
S44PLAY.X v0.85 (1999.06.15) 入力データと出力データの大きさの違いに柔軟に対応するために、3 バッファ 方式から 4 バッファ方式に変更。
S44PLAY.X v0.86 (1999.06.15) 激光電脳倶楽部 Vol.7 に高音質化バージョンとして掲載。-sq の動作がまだ 不完全。
S44PLAY.X v0.87 (1999.06.26) machine_check で user が足りないバグを修正。
S44PLAY.X v0.88 (1999.07.16) Timer-D 割り込み間隔のデフォルトが本体の種類(X68000/X68030)だったと ころを MPU の種類(68000/68030/68040/68060 に変更)。 ステレオ再生時に左右の位相が反転してしまうバグの原因が、バッファに充填 された 1 回分の入力データに対して左右の出力データの個数が一致しない場合 があることが考慮されていなかったためであることが判明。修正。-sq が完成。
S44PLAY.X v0.89 (1999.07.19) .s44 以外の .s22 などに対応。使用法の表示が長くなった。
S44PLAY.X v0.90 (1999.07.19) CURRENT_TIME を追加。再生時間を表示するようになった。 -b の単位を n/7 MB から n/6 MB に変更。
S44PLAY.X v0.91 (1999.07.19) 出力側のサンプリング周波数を表示。 入力側と出力側の周波数が同じときは強制的に -lq にする。
S44PLAY.X v0.92 (1999.07.21) ADPCM デコーダを追加。ノイズが多いので仮対応。 満開ネットで公開。
この間に満開製作所のゲーム『あの、素晴らしい をもう一度』が完成、発 売。オープニング曲がボーカル入りで内蔵音源でステレオで鳴るゲームは X68k 史上初に違いない。
S44PLAY.X v0.93 (1999.10.17) ソースを分割。ライブラリ部分を libkt に統合。 setup_timerd_routine の自己書き換え処理のループカウンタの初期値が間違 っていて最悪の場合ハングアップする可能性があった大バグを発見、修正。ソー スの分割でリンク時のコードの順序が変わったために不具合が露顕した。自己書 き換えコードを追加した v0.81 からずっとバグっていたらしい。これでよく動 いていたものだ。 ADPCM デコーダのノイズを改善(PCM8.X と同じにした)。ADPCM に正式対応。 ついでに .p16 にも対応。 CDU-561/CDU-55S の転送速度の設定を分離して他の種類のドライブで余計なエ ラーメッセージが出ないようにした(つもりだが他の種類のドライブでの動作は 未確認)。 -normal/-fast/-ultra を追加。当然だが -normal ではリアルタイム再生は間 に合わない。 TOSHIBA 以外のドライブはデフォルトで SONY 系のコマンドを使う。 [F] でフェードアウトしたとき自動的に再生を終了する(懸案だった)。この 変更で current_time の結果が単調に増加していないことが判明したがこちらは 未修正。 -fi12 をデフォルトにすることで -sq の再生開始時のノイズを軽減(根本的 な解決にはなっていない)。
S44PLAY.X v0.94 (1999.11.17) (1999.10.21) CDXA なファイルの検索エンジンがほぼ完成。後はデコーダ本体 と CDDA の初期化や読み込みのルーチンとの摺り合わせ(パラメータに CDDA と CDXA が混在していた場合に誤動作させないため)を経て CDXA を再生できるよ うになる予定。 (1999.10.23) CDXA のデコーダ(68000 用最適化版)が完成。音はクリアだが 特定の箇所で強いプチノイズが出ることがあり、デコーダの問題かデータのノイ ズかは今のところ不明。m19,m38,s19,s38 の自動判別を追加。 (1999.10.24) PRECONV_ADPCM_HQ_DOWNの@bakが呼び出し側ではd4,内部ではa4 になっていたバグを修正。 (1999.10.28) CDXA デコーダの実装に伴って必要になった PCM→TL 変換マク ロの再構築が完了。preconv.s を元にして作った preconv.mac が稼働。とりあ えず ADPCM デコーダを新しい preconv.mac ベースに移行。一発 OK。これに伴 って、従来はレジスタが足りなかったためできなかった ADPCM の -sq での再生 が可能になった。 (1999.10.28) CDXA ファイルの再生エンジンが稼働。どきポヤの MOVIE\OPEN_256.STR のモノラルとステレオ再生および VOICE\CHN\000.X16 のモ ノラル再生に成功。 (1999.10.29) CDXA デコーダの高精度ルーチンが稼働。強いプチノイズがなく なった。テストはカードキャプターさくら。 今後の予定。CD-ROM アクセスの整備。特に終了時に CD-ROM のモードが変更 されたままになっているは困る。通常のファイルや CDDA を新しい preconv.mac へ移行したい。 (1999.11.09) convert_endian_68000 のバグを修正。 (1999.11.15) CDDA と CDXA の CD-ROM まわりのコードを融合・整備。 (1999.11.16) 周波数変換をすべて preconv.mac ベースに移行。
S44PLAY.X v0.95 (1999.12.02) (1999.11.24) バスブースターとハイカットフィルタの実験。共通のルーチン を使用。 (1999.12.01) read_cdda にバグ発見。FMP データのサイズの最下位バイトが 壊れていた。 (1999.12.01) バスブースターとハイカットフィルタのルーチンを分離。 (1999.12.01) global.mac と preconv.mac から .global 宣言を除去。 (1999.12.02) Timer-C の割り込み間隔を 16μs から 50μs に変更。デバッ グオプションを有効にした。MIN_INT=16、MAX_INT=80 に設定
S44PLAY.X v1.00 (1999.12.03) CD-ROM になった月刊電脳倶楽部での公開に合わせて、バージョンを v1.00 に 格上げ。
現在に至る。